getsockname函数获取本地IP为何是127.0.0.1情况分析

您所在的位置:网站首页 python 获取本地IP地址 getsockname函数获取本地IP为何是127.0.0.1情况分析

getsockname函数获取本地IP为何是127.0.0.1情况分析

2024-07-17 13:18| 来源: 网络整理| 查看: 265

最近在项目测试的时候发现一个问题,getsockname接口获取的IP地址在有些机器上是真正的IP地址例如192.168.2.207,有些机器获取出来的是127.0.0.1这个地址。 为什么会出现getsockname获取的是127.0.0.1这个问题,我认真去探究了一下。 部分代码如下:

//等待处理 while(1) { //等待client端的连接 newFd=accept(sockfd,(struct sockaddr *)&from,&len); if(newFd==-1) continue; getsockname(newFd, (struct sockaddr *)&addr, &len); //getsockname(sockfd, (struct sockaddr *)&addr, &len); ptr = inet_ntoa(addr.sin_addr); printf("%s:%d", ptr, htons(addr.sin_port)); 。。。。。 }

场景说明:在测试的时候,服务器和客户端不在同一电脑,获取IP的真实网卡IP,在同一台电脑就是127.0.0.1 原因分析:如果你的客户端和服务端在同一台机器上,那么你的数据交互就不涉及真实IP地址,只是经过本机而已,所以拿到的地址就是127.0.0.1。不在同一电脑,那么他们数据交互肯定是经过真实IP地址的,所以通过socket拿到的IP就是真实的 PS:只针对我这个情况作了分析,其它情况不一定适用~ getsockname函数是要对accept返回值使用, 不是进行listen或bind的那个socket,如我上面的代码: 是getsockname(newFd, (struct sockaddr *)&addr, &len);//newFd,accept返回值 而不是getsockname(sockfd, (struct sockaddr *)&addr, &len);//sockfd



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3